/**
 * 存储用户西南西：token/个人信息
 */
import { setToken, getToken, removeToken } from '@/utils/auth'
import { loginApi, getUserInfoApi, getUserDetailByIdApi } from '@/api/user.js'

export default {
  // 模块化加锁
  namespaced: true,
  // 1.定义变量
  state: {
    token: getToken() || '',
    userInfo: {}
  },
  // 2.修改变量,同步修改
  mutations: {
    /**
     *
     * @param {*} state 所有变量
     * @param {*} payload 调用setToken方法传入的参数
     */
    setToken(state, token) {
      state.token = token
      // 防止刷新没了，在硬盘存储一份
      setToken(token)
    },
    delToken(state) {
      state.token = ''
      removeToken()
    },
    setUserInfo(state, info) {
      state.userInfo = info
    },
    delUserInfo(state) {
      state.userInfo = {}
    }
  },
  // 3.调用后台接口发请求（异步）
  actions: {
    /**
     *
     * @param {*} ctx 上下文
     * @param {*} loginForm 调用loginAction传入的参数值
     */
    async loginAction(ctx, loginForm) {
      const token = await loginApi(loginForm)
      console.log('登录成功token', token)
      // 2.存储token
      // ctx.coommit === 等于this.$store.commit

      ctx.commit('setToken', token)
    },
    // 获取用户个人信息，但是不包含头像
    async getUserInfoAction({ commit }, loginForm) {
      const userInfo = await getUserInfoApi()
      console.log('获取用户个人信息', userInfo)
      // 获取用户头像信息
      const avatorInfo = await getUserDetailByIdApi(userInfo.userId)
      console.log('用户头像信息', avatorInfo)
      commit('setUserInfo', { ...userInfo, ...avatorInfo })
    },
    // 退出登录
    logoutAction({ commit }) {
      // 删除token和用户信息
      commit('delToken')
      commit('delUserInfo')
    }
  }
}
